perm filename APP4[AIM,DBL]1 blob sn#124700 filedate 1974-10-17 generic text, type T, neo UTF8
00100	.DEVICE XGP
00200	.FONT 1 "NGR20"
00300	.FONT 2 "SIGN57"
00400	.FONT 3 "SHD40"
00500	.FONT 4 "BDI25"
00600	.FONT 5 "GRFX25.FNT[AIM,DBL]"
00700	.FONT 6 "FIX25"
00800	.PAGE FRAME 69 HIGH 130 WIDE
00900	.AREA TEXT LINES 4 TO 67 IN 1 COLUMNS 130 WIDE
01000	.TITLE AREA HEADING LINES 1 TO 3 IN 1 COLUMNS 75 WIDE
01100	.TITLE AREA FOOTING LINE 69 IN 1 COLUMNS 75 WIDE
01200	.TURN ON "↓_π{"
01300	.TURN ON "\" FOR "%"
01400	.MACRO B ⊂ BEGIN VERBATIM GROUP ⊃
01500	.MACRO E ⊂ APART END ⊃
01600	.TABBREAK
01700	.COMPACT
01800	.EVERY FOOTING(Fourth Draft .... {DATE},page A4.{IF PAGE = 1 THEN 1 ELSE PAGE},CF Program excerpts\*)
01900	.EVERY HEADING(\3BEINGS\*,,\4Doug Lenat\*)
02000	.COUNT PAGE PRINTING "1"
02100	.NEXT PAGE
02200	
02300	\2APPENDIX 4. \* \3CF .... PROGRAM\*
02400	
     

00100	.GROUP SKIP 10
00200	.SELECT 6
00300	.NOFILL
00400	This  appendix  opens  a  detailed  example  of  PUP6  in  operation.
00500	Fragments of the target concept formation program are exhibited,  and
00600	on  page  A4.7  is  a  flowchart  for a hand-coded version of CF, the
00700	target concept formation program discussed earlier.  Like PUP6,  both
00800	hand-coded  and  synthesized  versions of CF are written in INTERLISP
00900	[Teitelman, 197?] with slight  additions  (setdifference,  disk-dump,
01000	etc.)   only.        Following   each   hand-coded  piece  comes  the
01100	corresponding  BEING  version  created  by  PUP6.     Some  functions
01200	mentioned  are  system  functions used to augment the language (e.g.,
01300	MATCH, nondeterministic  CHOOSE-FROM.)  A  few  functions  have  been
01400	omitted  to  aid  in  readability  (e.g., VECTOR and TUPLE, which are
01500	inverse quote forms of the function LIST). The reader should  examine
01600	the  META:CODE  sections  of  each  BEING;  they  contain much of the
01700	\4executable\* code of the BEING.   The choice  of  functions,  while
01800	not  a  random  sample,  is  not  intentionally biassed. The opening,
01900	top-level functions are shown (by hand and by PUP6), and then a  very
02000	low-level   maintenance  function  (delete  a  feature  from  the  NO
02100	relations of a model) is exhibited.
02200	
02300	The next phase of the extended CF example is  found  in  Appendix  5.
02400	There is a transcript of the dialogue between the user and PUP6 which
02500	produced this synthesized code. User responses are italicized to ease
02600	the  reading.     Notice  how the user may interrupt and ask PUP6 for
02700	clarification.
02800	
02900	The sixth appendix section presents a session with  this  synthesized
03000	program  itself  running. During the exectution of CF, the user stops
03100	and occasionally ask it questions; the answers are  not  particularly
03200	impressive,  but  they  are  at the same level as those one gets from
03300	PUP6.
     

00100	.SELECT 1
00200	.NOFILL
00300	
00400	
00500	
00600	\4The top-level functions do initialization and repeatedly build up models:\*
00700	
00800	(CF
00900	  [LAMBDA NIL
01000	    (INITIALIZE:1)
01100	    (PARTITION:A:DOMAIN])
01200	
01300	(INITIALIZE:1
01400	  [LAMBDA NIL
01500	    (SETQ YES:RELATIONS (QUOTE YES:RELATIONS))
01600	    (SETQ NO:RELATIONS (QUOTE NO:RELATIONS))
01700	    (SETQ MAYBE:RELATIONS (QUOTE MAYBE:RELATIONS))
01800	    (SETQ CLASS:OBJECTS (QUOTE CLASS:OBJECTS))
01900	    (SETQ CLASS:NAMES:ORDERING (QUOTE CLASS:NAMES:ORDERING))
02000	    (SETQ IN (QUOTE IN))
02100	    (SETQ UNTIL (QUOTE UNTIL))
02200	    (SETQ CLASS:RELATIONS (QUOTE CLASS:RELATIONS))
02300	    (SETQ DO (QUOTE DO))
02400	    (SETQ FOR (QUOTE FOR))
02500	    (SETQ FROM (QUOTE FROM))
02600	    (SETQ TO (QUOTE TO))
02700	    (SETQ USING (QUOTE USING))
02800	    (SETQ LIST:OF:POSSIBLE:CLASS:NAMES NIL)
02900	    (SETQ FILE:NAME (ASK:FOR:2])
03000	
03100	\4The BEING version uses a list of initializations to do at LOAD time\*
03200	
03300	  (RPAQQ GLOBAL:INITIALIZATION:LIST (
03400	          (SETQ TYPE:OF:C:F CLASSIFICATORY:CONCEPT:FORMATION)
03500		  (SETQQ HALT HALT)
03600		  (SETQQ NAME:OF:CLASS NAME:OF:CLASS)
03700		  (SETQQ SET:OF:POSSIBLE:NAMES:OF:CLASS NIL)
03800		  (SETQQ ALPHORDER ALPHORDER)
03900	  	  (SETQQ NOTHING NOTHING)
04000		  (SETQQ POSSIBLE:NAME:OF:CLASS POSSIBLE:NAME:OF:CLASS)
04100		  (SETQQ MAYBE:RELNS:30 MAYBE:RELNS:30)
04200		  (SETQQ YES:RELNS:28 YES:RELNS:28)
04300		  (SETQQ ELEMENT:RELNS:15 ELEMENT:RELNS:15)
04400		  (SETQQ NO:RELNS:29 NO:RELNS:29)
04500		  (SETQQ POSSIBLE:NAME:OF:CLASS:OBJECTS:20 POSSIBLE:NAME:OF:CLASS:OBJECTS:20)
04600		  (SETQQ ELEMENT:OBJECTS:11 ELEMENT:OBJECTS:11)
04700		  (SETQQ CLASS:MAYBE:RELNS:37 CLASS:MAYBE:RELNS:37)
04800		  (SETQQ CLASS:NO:RELNS:36 CLASS:NO:RELNS:36)
04900		  (SETQQ CLASS:YES:RELNS:35 CLASS:YES:RELNS:35)
05000		  (SETQQ CLASS:CLASSNAME:34 CLASS:CLASSNAME:34)
05100		  (SETQQ CLASS:OBJECTS:33 CLASS:OBJECTS:33)
05200		  (SETQQ ??? ???)))
05300	
05400	  (PUTPROPS CF:1 IDEN ((( ( (MEMBER LI (QUOTE ((CONCEPT FORMATION)
05500							   (CF:1)
05600							   (CONCEPT LEARNING)
05700							   (FORM CONCEPTS)
05800							   (LEARN CONCEPTS)
05900							   (LEARNS CONCEPTS)
06000							   (FORMS CONCEPTS))))))
06100				( CF:1))) 
06200	                 EXPLICIT:ARGS:CHECK T 
06300	                 WHAT ( A SPECIALIZED BEING WHICH DOES
06400				      ( LEARN HOW TO IMPOSE A CONCEPT STRUCTURING UPON A DOMAIN; LEARN HOW TO 
06500					     CHARACTERIZE, OR AT LEAST DISTINGUISH, VARIOUS CONCEPTS)) 
06600	                 HOW ( BY CHOOSING THE DESIRED TYPE OF CONCEPT FORMATION CALLED FOR, AND THEN CARRYING IT OUT) 
06700	                 WHY ( CONCEPT:LEARNING IS NECESSARY TO CONCEPT KNOWLEDGE AND CONCEPT:FORMATION IS TOO GENERAL TO 
06800				    USE AS IT IS) 
06900	                 MAIN:EFFECTS ((( ABLE PUP ( LEARN CONCEPTS))
07000					( CF:1))) 
07100	                 WHEN (((MEMBER TYPE:OF:C:F ABLE:PUP:LIST)
07200				-70
07300				( BECAUSE IF WE CAN ALREADY DO ( TYPE:OF:C:F)
07400				       THEN WE SHOULDNT TRY TO DO IT OVER AGAIN))
07500			       ((MEMBER (QUOTE (CHARACTERIZE CLASSES))
07600					PUP:WANTS:LIST)
07700				88
07800				(QUOTE (BECAUSE CONCEPT FORMATION IS A GOOD WAY TO GET A CHARACTERIZATION OF CLASSES)))
07900			       (T (COND (NEW:INFO:LIST -60)
08000					(T 40))
08100				  (QUOTE (BECAUSE NEW INFORMATION MIGHT ALTER OUR COURSE OF ACTION)))) 
08200	                 \4META:CODE\* (TEMPORARILY (PAD:2)) 
08300	                 PRE:REQUISITES (( AWARE USER ( PUP IS ABOUT TO WORK ON CONCEPT FORMATION))
08400					 ( AWARE USER ( THE TYPE OF CONCEPT FORMATION PUP IS ABOUT TO WORK ON IS
08500								    ( TYPE:OF:C:F)))) 
08600	                 POST:REQUISITES (( AWARE USER ( PUP HAS THOUGHT ABOUT THE ( TYPE:OF:C:F)
08700								     TYPE OF CONCEPT:FORMATION))) 
08800	                 DEMONS ( INFERENCE:DEMONS ATTENTION:DEMONS) 
08900	                 AFFECTS () 
09000	                 COMPLEXITY: (.8 .8 .8 .8 .1) 
09100	                 GENERALIZATIONS (CONCEPT:FORMATION ATTEND LEARN INDUCTIVE:INFERENCE) 
09200	                 SPECIALIZATIONS NIL 
09300	                 ALTERNATIVES ((GRAMMATICAL:INFERENCE PATTERN:RECOGNITION SIMULATED:EVOLUTION)) 
09400	                 BEING T 
09500	                 EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1))
09600	
09700	\4Notice that both versions' CF functions just call PARTITION:A:DOMAIN\*
09800	
09900	(PARTITION:A:DOMAIN
10000	  [LAMBDA NIL
10100	    (PROG NIL
10200	      START:OF:SERIES
10300	          (INPUT:1:ELEMENT)
10400	          (COND
10500	            ((HAS:NAME)
10600	              (INPUT:2:CLASS:NAME))
10700	            (T (DETERMINE:1:CLASS:NAME)))
10800	          (COND
10900	            ((EQUAL CLASS:NAME (QUOTE HALT))
11000	              (HALT:1))
11100	            (T (PRINT (QUOTE (I NOW KNOW)))
11200	               [FOREACH (QUOTE NAME) IN LIST:OF:POSSIBLE:CLASS:NAMES
11300	                  DO (QUOTE (PROGN (PRINT NAME)
11400	                                   [COND
11500	                                     ((GETP NAME CLASS:OBJECTS)
11600	                                       (PRIN1 (QUOTE "OBJECTS "))
11700	                                       (PRINT (GETP NAME CLASS:OBJECTS]
11800	                                   [COND
11900	                                     ((GETP NAME YES:RELATIONS)
12000	                                       (PRIN1 (QUOTE "MUST HAVE "))
12100	                                       (PRINT (GETP NAME YES:RELATIONS]
12200	                                   [COND
12300	                                     ((GETP NAME NO:RELATIONS)
12400	                                       (PRIN1 (QUOTE "MUSNT HAVE "))
12500	                                       (PRINT (GETP NAME NO:RELATIONS]
12600	                                   (COND
12700	                                     ((GETP NAME MAYBE:RELATIONS)
12800	                                       (PRIN1 (QUOTE "MAY HAVE "))
12900	                                       (PRINT (GETP NAME 
13000	                                                    MAYBE:RELATIONS]
13100	               (GO START:OF:SERIES])
13200	
13300	\4The BEING version of PARTITION is quite similar.
13400	 Notice the use of comments: though written by PUP6 for its own use,
13500		   they are also meaningful to the user.\*
13600	
13700	  (PUTPROPS PAD:2 IDEN ((( ( (MATCH ( PARTITION A DOMAIN)
13800						LI)))
13900				 ( PAD:2))
14000				(( ( (MATCH ( DIVIDE A DOMAIN UP)
14100						LI)))
14200				 ( PAD:2))) 
14300	                  IMPLICIT:ARGS (PRESULT) 
14400	                  EXPLICIT:ARGS:CHECK T 
14500	                  WHAT ( A SPECIALIZED BEING WHICH DOES
14600				       ( DIVIDE A DOMAIN INTO SUBDOMAINS; USUALLY THESE WILL BE DISJOINT, AND THEIR UNION 
14700					      WILL BE THE ENTIRE DOMAIN)) 
14800	                  HOW ( BY BUILDING UP THE PARTITION GRADUALLY, BY ADDING TO OUR KNOWLEDGE OF THE PARTITION ONE 
14900				     PAIR AT A TIME; HERE A PAIR IS <ELEMENT, CLASS:NAME>) 
15000	                  WHY ( BECAUSE PUP MUST ENCODE A FUNCTION WHICH PARTITIONS A DOMAIN INTO CLASSES AND 
15100				     PARTITION:A:DOMAIN IS TOO GENERAL TO USE AS IT IS) 
15200	                  MAIN:EFFECTS ((( PARTITIONED DOMAIN)
15300					 ( PAD:2))) 
15400	                  WHEN ((PARTITIONED:DOMAIN:LIST -100 ( BECAUSE WE ALREADY HAVE PARTITIONED DOMAIN))
15500				((NULL PARTITIONED:DOMAIN:LIST)
15600				 20
15700				 ( BECAUSE PUP HAS NOT YET PARTITIONED DOMAIN, SO IT IS PLAUSIBLE TO DO IT NOW))) 
15800	                  \4META:CODE\* (PROG NIL LABEL:1 (TAKE:HOLD:OF:3 ELEMENT:4)
15900					  (COND ((HAS:NAME:5 ELEMENT:4 (COMMENT PARTITION:BY:TAKE:ELE:AND:CLASS))
16000						 (PROGN (TAKE:HOLD:OF:6 NAME:OF:CLASS)
16100							(MODIFY:STRUCTURE:7 NAME:OF:CLASS)))
16200						(T (PROGN (GET:HOLD:OF:8 NAME:OF:CLASS)
16300							  (MODIFY:STRUCTURE:9 NAME:OF:CLASS))))
16400					  (COND ((IS:OF:TYPE:61 ARG1 (COMMENT BREAKAWAY))
16500						 (COMMENT FINALIZATION OF LOOP STARTING AT LABEL:1 MAY GO HERE))
16600						(T (AND (FOREACH NAME IN SET:OF:POSSIBLE:NAMES:OF:CLASS DO
16700								 (PROGN (PUPRINT NAME)
16800									(COND ((GETP NAME CLASS:OBJECTS:33)
16900									       (PUPRIN1 "OBJECTS ")
17000									       (PUPRINT (GETP NAME CLASS:OBJECTS:33))))
17100									(COND ((GETP NAME CLASS:YES:RELNS:35)
17200									       (PUPRIN1 "MUST HAVE ")
17300									       (PUPRINT (GETP NAME CLASS:YES:RELNS:35))))
17400									(COND ((GETP NAME CLASS:NO:RELNS:36)
17500									       (PUPRIN1 "MUSNT HAVE ")
17600									       (PUPRINT (GETP NAME CLASS:NO:RELNS:36))))
17700									(COND ((GETP NAME CLASS:MAYBE:RELNS:37)
17800									       (PUPRIN1 "MAY HAVE ")
17900									       (PUPRINT (GETP NAME CLASS:MAYBE:RELNS:37))))
18000									(TERPRI)
18100									T))
18200							(GO LABEL:1))))
18300					  (COMMENT COMMENT SEE: THERE IS NO INFINITE LOOP IN THIS PROG AFTER ALL; WE ARE 
18400						   EXITING IT!)) 
18500	                  DEMONS ( FRINGE:OF:CONCIOUSNESS:DEMON) 
18600	                  COMPLEXITY: (.8 .8 .8 .8 .1) 
18700	                  GENERALIZATIONS (PARTITION:A:DOMAIN  MAP BUILD:FUNCTION) 
18800	                  SPECIALIZATIONS NIL 
18900	                  ALTERNATIVES ( DIVIDE:UP DISCRETIZE) 
19000	                  BEING T 
19100	                  EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1) 
19200	                  AFFECTS ( ( ELEMENT:4 POSSIBLE CALLED)
19300					  ( ELEMENT:4 POSSIBLE CALLED)
19400					  ( IN POSSIBLE CALLED)))
19500	
19600	\4Here are the hand versions of INPUT:1:ELEMENT and HAS:NAME\*
19700	
19800	(INPUT:1:ELEMENT
19900	  [LAMBDA NIL
20000	    (PRINT (QUOTE (I AM READY FOR A SCENE)))
20100	    (SETQ ELEMENT (READ))
20200	    (SETQ LIST:OF:OBJECTS:OF:ELEMENT (CORRESPONDING:OBJECTS:PART))
20300	    (SETQ SET:OF:RELATIONS (CORRESPONDING:RELATIONS:PART))
20400	    (SETQ CLASS:NAME (CAR ELEMENT])
20500	
20600	(HAS:NAME
20700	  [LAMBDA NIL
20800	    (NOT (EQUAL (CAR ELEMENT)
20900	                (QUOTE ?])
21000	
21100	\4The PUP6 versions include extra BEINGS, STATIC:SCENE and ELEMENT, which
21200	have no control function;  rather,  their role  is  analogous to a data
21300	structure. PUP6 uses the name TAKE:HOLD:OF:3 instead of INPUT:1:ELEMENT.\*
21400	
21500	  (PUTPROPS STATIC:SCENE:10 IDEN ((( ( (EQUAL LI (LIST STATIC:SCENE:10))))
21600					   ( STATIC:SCENE:10))) 
21700	                            \4META:CODE\* (STRUCTURE (OBJECTS SET O)
21800							 (CLASS:NAME NAME N)
21900							 (STATIC RELATIONS S BETWEEN OBJECTS)) 
22000	                            COMPLEXITY: (.8 .8 .8 .8 .1) 
22100	                            DATA:STRUCTURE T 
22200	                            BEING T 
22300	                            WHAT ( A SPECIALIZED BEING WHICH DOES NIL)
22400	                            WHY (SCENE IS TOO GENERAL TO USE AS IT IS) 
22500	                            GENERALIZATIONS (SCENE) 
22600	  (PUTPROPS ELEMENT:4 IDEN ((( ( (EQUAL ( ELEMENT:4)
22700						    LI)))
22800				     ( ELEMENT:4))) 
22900	                      EXPLICIT:ARGS:CHECK T 
23000	                      WHAT ( A SPECIALIZED BEING WHICH DOES
23100					   ( A STRUCTURE WHICH IS A MEMBER OF A LARGER STRUCTURE)) 
23200	                      COMPLEXITY: (.8 .8 .8 .8 .1) 
23300	                      DATA:STRUCTURE (ACCESS (((SOME:PART:OF:16 X)
23400						       ACCESSES
23500						       (STATIC RELATIONS S BETWEEN OBJECTS))
23600						      ((SOME:PART:OF:14 X)
23700						       ACCESSES
23800						       (CLASS:NAME NAME N))
23900						      ((SOME:PART:OF:12 X)
24000						       ACCESSES
24100						       (OBJECTS SET O)))) 
24200	                      BEING T 
24300	                      EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1) 
24400	                      WHY (ELEMENT IS TOO GENERAL TO USE AS IT IS) 
24500	                      \4META:CODE\* (STRUCTURE (OBJECTS SET ELEMENT:OBJECTS:11)
24600						   (CLASS:NAME NAME ELEMENT:CLASSNAME:13)
24700						   (STATIC RELATIONS ELEMENT:RELNS:15 BETWEEN OBJECTS)) 
24800	                      GENERALIZATIONS (ELEMENT) 
24900	  (PUTPROPS HAS:NAME:5 EXPLICIT:ARGS (ARG1 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1) 
25000	                       EXPLICIT:ARGS:CHECK T 
25100	                       WHAT ( A SPECIALIZED BEING WHICH DOES ( SEE IF ( ARG1)
25200										  IS OF THE TYPE SPECIFIED. THE PARTICULAR TYPE 
25300										  IS DELINEATED BY THE SPECIAL KNOWLEDGE
25400										  ( DUMMY:ARGUMENT:2))) 
25500	                       HOW ( USE ( DUMMY:ARGUMENT:2)
25600					  DETAILS TO SEE IF IT CONTAINS ( ARG1)) 
25700	                       WHY ( WE MUST BE ABLE TO TEST AN ARG1 ( ARG1)
25800					  AND SEE IF IT BELONGS TO THE TYPE ( DUMMY:ARGUMENT:2)
25900					  AND IS:OF:TYPE IS TOO GENERAL TO USE AS IT IS) 
26000	                       \4META:CODE\* (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:4)
26100						(NOT (EQUAL (CAR ARG1)
26200							    ???))) 
26300	                       COMPLEXITY: (.8 .8 .8 .8 .1) 
26400	                       SPECIALIZATIONS NIL 
26500	                       PREDICATE T 
26600	                       BEING T 
26700	                       GENERALIZATIONS (IS:OF:TYPE) 
26800	                       AFFECTS ( ( IN POSSIBLE CALLED)
26900					       ( ELEMENT:4 POSSIBLE CALLED)))
27000	  (PUTPROPS TAKE:HOLD:OF:3 EXPLICIT:ARGS (ARG1) 
27100	                           EXPLICIT:ARGS:CHECK T 
27200	                           NLAMBDA T 
27300	                           WHAT ( A SPECIALIZED BEING WHICH DOES ( TAKE THE ARG1 ( ARG1)
27400										      IN A TRIVIAL WAY; EITHER BY ACCESSING IT 
27500										      OR BY READING IT IN)) 
27600	                           HOW ( LOOK AROUND A LITTLE; IF IT ISNT FOUND TRIVIALLY, THEN ASK THE USER TO GIVE
27700					      ( ARG1)
27800					      TO US) 
27900	                           WHY ( PUP WANTS ( ARG1)
28000					      ,AND WE DON'T HAVE TO DO ANY COMPUTING TO GET IT AND TAKE:HOLD:OF IS TOO GENERAL 
28100					      TO USE AS IT IS) 
28200	                           COMPLEXITY: (.8 .8 .8 .8 .1) 
28300	                           BEING T 
28400	                           \4META:CODE\* (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:4)
28500						    (PROGN (PUPRINT (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:4))
28600							   (SET ARG1 (PREAD))
28700							   (SETQ ELEMENT:OBJECTS:11 (SOME:PART:OF:12 (EVAL ARG1)))
28800							   (SETQ ELEMENT:CLASSNAME:13 (SOME:PART:OF:14 (EVAL ARG1)))
28900							   (SETQ ELEMENT:RELNS:15 (SOME:PART:OF:16 (EVAL ARG1)))
29000							   T)) 
29100	                           GENERALIZATIONS (TAKE:HOLD:OF) 
29200	                           AFFECTS ( 
29300						   ( ELEMENT:4 POSSIBLE CALLED)
29400						                                   
29500						   ( ELEMENT:OBJECTS:11 POSSIBLE CALLED)
29600						   ( ELEMENT:CLASSNAME:13 POSSIBLE CALLED)
29700						   ( ELEMENT:RELNS:15 POSSIBLE CALLED)))
29800	
29900	\4The following is a very low-level function, which must insert
30000	a key contradictory feature into a model's NO relation set.\*
30100	
30200	(DELETE:1:3:1
30300	  [LAMBDA NIL
30400	    (PROG (TEMPORARY:NO:RELATIONS)
30500	          (SETQ TEMPORARY:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
30600	          (SETQ TEMPORARY:NO:RELATIONS (PULLOUT RELATION 
30700	                                             TEMPORARY:NO:RELATIONS))
30800	          (PUT CLASS:NAME NO:RELATIONS TEMPORARY:NO:RELATIONS])
30900	
31000	\4The version PUP6 writes includes the test as well:   there must be
31100	some feature in the current NO relations set which is also present
31200	in  the  scene  (that is,  located on the list  ELEMENT:RELNS:15).\*
31300	
31400	  (PUTPROPS CONDITIONAL:DELETION:54 IDEN ((( ( ( ( ( (EQUAL (CAR LI)
31500									   (QUOTE DELETE)))))))
31600						   ( CONDITIONAL:DELETION:54 (TRANSLATE (IN (CDR LI))
31700											      T)))) 
31800	                                    EXPLICIT:ARGS (DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1) 
31900	                                    EXPLICIT:ARGS:CHECK T 
32000	                                    WHAT ( A SPECIALIZED BEING WHICH DOES
32100							 ( PERHAPS WE WILL REMOVE AN ELEMENT FROM CLASS:NO:RELNS:29 , 
32200								SOMETHING IN BOTH ELEMENT:RELNS:15
32300								AND ALREADY ON THE CLASS:NO:RELNS:29 LIST
32400	                                                        IF SUCH AN ENTITY CAN BE FOUND))
32500	                                    HOW ( WE WILL SEARCH FOR SUCH AN ELEMENT, AND USE PULLOUT)
32600	                                    WHY ( IT WOULD BE CONTRADICTORY FOR SUCH AN ELEMENT TO REMAIN ON THIS LIST 
32700						       IF IT IS ON THE LIST AND ALSO ON THE ELEMENT:RELNS:15 LIST AT THE SAME 
32800						       TIME. WE HAD TO SPECIALIZE TO THE CONDITIONAL:DELETION BEING BECAUSE
32900						       AND CONDITIONAL:DELETION IS TOO GENERAL TO USE AS IT IS)
33000	                                    \4META:CODE\* (PROGN (SETQ RESULT:6 (SETINTERSECTION (GETP NAME:OF:CLASS 
33100												   CLASS:NO:RELNS:36)
33200											     ELEMENT:RELNS:15))
33300							     (COND (RESULT:6 (PUT NAME:OF:CLASS CLASS:NO:RELNS:36
33400										  (PULLOUT RESULT:6 (GETP NAME:OF:CLASS 
33500													  CLASS:NO:RELNS:36))))
33600								   (T (SETQ RESULT:6 NIL)))) 
33700	                                    COMPLEXITY: (.8 .8 .8 .8 .1) 
33800	                                    GENERALIZATIONS (CONDITIONAL:DELETION  MODIFY:STRUCTURE) 
33900	                                    BEING T 
34000	                                    AFFECTS ( ( ELEMENT:RELNS:15 POSSIBLE CALLED)))
     

00100	.NEXT PAGE
00200	.SELECT 5
00300	\4    FLOW CHART, INCLUDING NAMES OF MAJOR FUNCTIONS\*
00400	.B
00500	
00600	⊂αααα⊃      ⊂ααααααααααααααααααααααα⊃
00700	~ CF εααααα→λ    (INITIALIZE:1)     ~
00800	%αααα$      %ααααααααααπαααααααααααα$
00900	                       ~
01000	                       ~    enter the PARTITION:A:DOMAIN loop
01100	                       ~
01200	     ⊂α⊃    ⊂αααααααααα↓αααααααααααα⊃
01300	     ~1εααα→λ Accept the description~
01400	     %α$    ~     of a scene        ~               ⊂α⊃
01500	⊂αααααααααα→λ   (INPUT:1:ELEMENT)   ~               ~2~
01600	~           %ααααααααααπαααααααααααα$               %π$
01700	~                      ~                             ~
01800	~                      ~                             ~
01900	~           ⊂αααααααααα↓αααααααααααα⊃     ⊂αααααααααα↓αααααααααααα⊃
02000	~           ~ Does the scene have a ~ YES ~  Has the scene been   ~ YES
02100	~           ~       name?           εαααα→λ previously described? εααααα⊃
02200	~           ~      (HAS:NAME)       ~  ⊂α→λ(CHECKαFORαOLDαNAME)   ~     ↓
02300	~           %ααααααααααπαααααααααααα$  ↑  %ααααααααααπαααααααααααα$     ~
02400	~                      ~NO             ~             ~NO                ~
02500	~                      ~               ~             ~                  ~
02600	~                      ~               ~  ⊂αααααααααα↓αααααααααααα⊃     ~
02700	~                      ~               ~  ~ Insert the description~     ~
02800	~                      ~     (NOαGUESS)~  ~  of the scene in the  ~     ~
02900	~                      ~      AND SCENE~  ~      object list      ~     ~
03000	~                      ~       DEFINED ~  ~      (NEWαNAME)       ~     ~
03100	~                      ~          ⊂αααα$  %ααααααααααπαααααααααααα$     ~
03200	~                      ~          ~                  ~                  ~
03300	~                      ~          ~                  ~                  ~
03400	~(NOαGUESS) ⊂αααααααααα↓αααααααααα↑α⊃               ⊂↓⊃                 ~
03500	~AND SCENE  ~ Make a guess at what  ~   GUESS       ~1~                 ~
03600	~UNDEFINED  ~the object is, based on~ CORRECTLY     %↑$                 ~
03700	~←ααααααααααλ    previous scenes    ε→αααααααα⊃      ~                  ~
03800	~           ~ (DETERMINE:CLASSNAME) ~         ~      ~                  ~
03900	~           %ααααααααααααααααααααααα$      ⊂αα↓αααααα↑ααααααααααααα⊃    ~
04000	~                      ~MADE WRONG         ~ Correlate this scene  ~    ~
04100	~                      ~GUESS              ~   with other scenes   ~←ααα$
04200	~           ⊂αααααααααα↓αααααααααααα⊃      ~(PATCHαOLDαDESCRIPTION)~
04300	~SCENE      ~   Put in MUSTs and    ~      %ααααααααααααααααααααααα$
04400	~UNDEFINED  ~    MUSNTs on scene    ~   ⊂α⊃
04500	%αααααααααα←λ      differences      εαα→λ2~
04600	            ~ (TIGHTENαCONSTRAINTS) ~   %α$
04700	            %ααααααααααααααααααααααα$
04800	.E